/*
* OrderInfoMapper.java
* Copyright(C) initcap
* @date 2018-08-08
*/
package cn.initcap.dao;

import cn.initcap.entity.OrderInfo;
import cn.initcap.entity.SeckillOrder;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;

/**
 * @author initcap
 * @date 2018/8/10 PM5:02
 */
@Mapper
public interface OrderInfoMapper {
    /**
     * 根据主键删除数据库的记录:order_info
     *
     * @param id 编号
     * @return 1 成功
     */
    int deleteByPrimaryKey(Long id);
//
//    /**
//     *  新写入数据库记录:order_info
//     *
//     * @param record 数据库对应的实体类
//     * @return 1 成功
//     */
//    int insert(OrderInfo record);

    /**
     * 动态字段,写入数据库记录:order_info
     *
     * @param record 数据库对应的实体类
     * @return 1 成功
     */
    int insertSelective(OrderInfo record);

    /**
     * 根据指定主键获取一条数据库记录:order_info
     *
     * @param id 编号
     * @return 实体类
     */
    OrderInfo selectByPrimaryKey(Long id);

    /**
     * 动态字段,根据主键来更新符合条件的数据库记录:order_info
     *
     * @param record 数据库对应的实体类
     * @return 1 成功
     */
    int updateByPrimaryKeySelective(OrderInfo record);

    /**
     * 查询所有的，配合PageHelper使用分页功能:order_info
     *
     * @return 实体类
     */
    List<OrderInfo> selectAll();

    /**
     * 根据用户编号和商品编号获取秒杀订单
     *
     * @param userId  用户编号
     * @param goodsId 商品编号
     * @return 秒杀订单实体类
     */
    @Select("select * from seckill_order where user_id=#{userId} and goods_id=#{goodsId}")
    SeckillOrder getSeckillOrderByUserIdGoodsId(@Param("userId") long userId, @Param("goodsId") long goodsId);

    /**
     * 新增订单实体类
     *
     * @param orderInfo 实体类
     * @return 编号
     */
    @Insert("insert into order_info(user_id, goods_id, goods_name, goods_count, goods_price, order_channel, status, create_date)values("
            + "#{userId}, #{goodsId}, #{goodsName}, #{goodsCount}, #{goodsPrice}, #{orderChannel},#{status},#{createDate} )")
    @SelectKey(keyColumn = "id", keyProperty = "id", resultType = long.class, before = false, statement = "select last_insert_id()")
    long insert(OrderInfo orderInfo);

    /**
     * 新增秒杀订单
     *
     * @param miaoshaOrder 实体类
     * @return 1 成功
     */
    @Insert("insert into seckill_order (user_id, goods_id, order_id)values(#{userId}, #{goodsId}, #{orderId})")
    int insertSeckillOrder(SeckillOrder miaoshaOrder);

    /**
     * 查询订单详情
     *
     * @param orderId 订单编号
     * @return 实体类
     */
    @Select("select * from order_info where id = #{orderId}")
    OrderInfo getOrderById(@Param("orderId") long orderId);

    /**
     * 删除订单
     */
    @Delete("delete from order_info")
    void deleteOrders();

    /**
     * 删除订单
     */
    @Delete("delete from seckill_order")
    void deleteSeckillOrders();
}